package com.example.myapplication.net;

public class Learn {
    /**
     * 上周遗留问题总结
     * 一、无序和有序广播（demo）：
     *
     * 1、按照接收者的优先级别接收，只有一个广播接收者能接收到此消息，再此广播接收者中逻辑执行完毕后，才会继续传递。
     * 通过SendOrderedBroadcast（）方法发送一条广播。
     *
     * 2、无序广播就是普通的广播，无序广播完全是异步执行，发送广播时所有监听这个广播的广播接收者都会接收到此消息，
     * 但接收的顺序不确定，没有优先级。通过sendBroadcast()方法进行发送，并通过intent传递数据。效率较高。
     *
     *
     * 二、动态和静态广播区别：
     *
     * 1.动态注册的广播 永远要快于静态注册的广播,不管静态注册的优先级设置的多高,不管动态注册的优先级有多低。
     * 2.动态注册广播不是 常驻型广播 ，也就是说广播跟随activity的生命周期。在activity结束前，移除广播接收器。静态注册是常驻型，也就是说当应用程序关闭后，
     *   如果有信息广播来，程序也会被系统调用自动运行。
     * 3.在同一个优先级下,谁先启动的快,谁将先接收到广播。
     * 4、静态注册的广播无法关闭,只有动态注册的广播可以关闭。
     * 5、静态注册是当程序关闭后，如果有广播发过来，还能启动程序。
     * 6、动态注册的生命周期跟程序的生命周期是一样的，程序关闭后动态注册的广播是不能在接收到广播的。
     * 7、动态广播无需在AndroidManifest.xml中声明即可直接使用，也即动态；而静态广播则需要
     *
     * 三、Service服务生命周期区别:
     *
     * (1)、生命周期：
     *
     * startService启动方式：onCreate()—>onStartCommand() —>onDestroy()；
     *
     * bindService启动方式：onCreate()—>onBind() —>onUnbind()—>onDestroy()；
     *
     * (2)、启动方式（基本使用方法）：
     *
     * startService：
     *
     * Intent mIntent=new Intent(MainActivity.this,startServiceDemo.class) ; startService(mIntent);//直接启动服务方式启动 stopService(mIntent);//停止服务
     *
     * bindService：
     *
     * ServiceConnection serviceConnection=new myServiceConnect(); Intent mBindIntent=new Intent(MainActivity.this,bindServiceDemo.class); bindService(mBindIntent,serviceConnection,BIND_AUTO_CREATE); unbindService(serviceConnection);
     *
     * 实现ServiceConnection接口
     *
     * public class myServiceConnect implements ServiceConnection { //绑定成功之后回调，Service中传递的数据，在此中接收 @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { }
     * // @Override public void onServiceDisconnected(ComponentName componentName) { } }
     *
     * 3、启动方式区别：
     *
     * （1）、生命周期的不同
     *
     * （2）、重复调用是调用方法不同
     *
     * startService启动方式：重复调用时,onCreate()方法只会创建调用一次，startCommand()会每次都会被调用
     *
     * bindService启动方式：重复调用时，onCreate()与onBind()都只会调用一次
     *
     * （3）、与activity之间关系不同
     *
     * startService启动方式：与activity之间没有什么关系，对应的activity被销毁时，不影响service
     *
     * bindService启动方式：与activity绑定，当对应的activity销毁时，对应的服务也销毁
     *
     * （4）、应用场景不同：
     *
     * startService启动方式：与activity没有什么关系，所以常用于，只指定Service的操作，不需要service返回操作结果，不需要与Service建立联系的场景
     *
     * bindService启动方式：activity需要Service操作完成后，返回一系列的返回结果的场景（这种场景也可以通过广播实现，但是操作频繁时会造成性能上的消耗）
     *
     * 四、横竖屏切换activity的生命周期的方法调用，启动方式。
     *
     * 正常activity生命周期：
     * onCreate()--->onStart()--->onResume()--->onPause()--->onSaveInstanceState()--->onStop--->onDestroy()
     * 竖屏切换为横屏,横屏切换竖屏activity生命周期：
     * onPause()--->onSaveInstanceState()--->onStop--->onDestroy()--->onCreate()--->onStart()--->onRestroeInstanceState()--->onResume()
     * 修改AndroidManifest.xml，把该Activity添加 android:configChanges="orientation"，竖屏转横屏activity生命周期，横屏转竖屏activity生命周期：
     * onConfigurationChanged()--->onPause()--->onSaveInstanceState()--->onStop--->onDestroy()--->onCreate()--->onStart()--->onRestroeInstanceState(--->onResume()
     * 修改AndroidManifest.xml，把该Activity添加 android:configChanges="orientation|keyboardHidden|screenSize"，竖屏转横屏,横屏转竖屏activity生命周期：onConfigurationChanged()
     *
     * 五、activity和fragment横竖屏切换遇到的问题
     *
     * 横屏导致Activity绘制，生命周期重新走了一遍，原来的fragment实例被销毁导致Fragment内控件找不到fragment管理器，可以避免切换走生命周期，可以重写onConfigurationChanged()来
     * 进行逻辑实现
     *
     * 六、本地服务、远程服务、前台服务、后台服务区别：
     * 本地服务: 寄存于当前的进程当中，当前进程结束后 Service 也会随之结束；因为处于同一个进程当中，所以Service 可以随时与 Activity 等多个部件进行通信，
     *          不需要IPC和AIDL；Service服务不会自动启动线程，如果没有人工调用多线程方式进行启动，Service将寄存于主线程当中。
     * 远程服务: 独立寄存于另一进程中， 服务常驻后台，通过 AIDL 接口定义语言，实现Android设备上的两个进程间通信(IPC)。
     * 前台服务: 在下拉通知栏有一条显示通知（主要做一些需要用户知道的事，但退出APP还能继续做，像音乐播放器类似的应用，在下拉栏有一些当前播放歌曲的信息和进行一些简单操作；
     *          有些下载功能放在Service里也会在下拉栏显示当前下载进度），但后台Service没有（主要是默默的做一些用户不知道的事，像收集定位数据，更新天气数据），
     *          前台Service优先级较高，不会由于系统内存不足而被回收。
     * 后台服务：没有显示通知（主要是默默的做一些用户不知道的事，比如收集定位数据，更新天气数据等），后台Service优先级较低，当系统出现内存不足情况时，很有可能会被回收。
     */
}
